#include "CVLBP.h"

float getLBP(cv::Mat_<int> & img,int x,int y)
{
	int value=img(x,y);
	return (value>img(x-1,y-1))+
				 (value>img(x,y-1)  )*2+
				 (value>img(x+1,y-1))*4+
				 (value>img(x+1,y)  )*8+
				 (value>img(x+1,y+1))*16+
				 (value>img(x,y+1)  )*32+
				 (value>img(x-1,y+1))*64+
				 (value>img(x-1,y)  )*128;
	
}


void getLBPHistogram(cv::Mat & img, cv::Mat_<int> & hist)
{
	hist.create(256,1);
	hist.setTo(0);

	cv::Mat_<int> imgcvt(img);

	for(int i=1;i<imgcvt.cols-1;i++)
	{
		for(int j=1;j<imgcvt.rows-1;j++)
		{
			hist(getLBP(imgcvt,j,i),1)+=1;
		}
	}
}

void getLBPDescriptorsFromKeysPoints(cv::Mat & img,cv::Mat_<float> keyspoints, cv::Mat_<float>& descriptors)
{
	descriptors.create(keyspoints.rows,1);
	descriptors.setTo(0);
	
	cv::Mat_<int> imgcvt(img);

	for(int i=0;i<descriptors.rows;i++)
	{
		if(keyspoints(i,1)>0 && keyspoints(i,1)<(imgcvt.cols-1) &&
			 keyspoints(i,0)>0 && keyspoints(i,0)<(imgcvt.rows-1))
		{
			descriptors(i,0)=getLBP(imgcvt,keyspoints(i,0),keyspoints(i,1));
		}
	}
}
